#ifndef _PRINTF_H
#define _PRINTF_H

#include "types.h"
#include "stdarg.h"

/**
 * 格式化输出函数
 * @param fmt 格式字符串
 * @param ... 可变参数
 * @return 输出的字符数量
 */
int printf(const char *fmt, ...);

/**
 * 使用可变参数列表的格式化输出
 * @param fmt 格式字符串
 * @param ap 可变参数列表
 * @return 输出的字符数量
 */
int vprintf(const char *fmt, va_list ap);

/**
 * 格式化字符串到缓冲区
 * @param buf 目标缓冲区
 * @param fmt 格式字符串
 * @param ... 可变参数
 * @return 写入缓冲区的字符数量
 */
int sprintf(char *buf, const char *fmt, ...);

/**
 * 使用可变参数列表格式化字符串到缓冲区
 * @param buf 目标缓冲区
 * @param fmt 格式字符串
 * @param ap 可变参数列表
 * @return 写入缓冲区的字符数量
 */
int vsprintf(char *buf, const char *fmt, va_list ap);

/**
 * 带颜色的格式化输出
 * @param color 颜色代码 (使用console.h中定义的COLOR_*常量)
 * @param fmt 格式字符串
 * @param ... 可变参数
 * @return 输出的字符数量
 */
int printf_color(int color, const char *fmt, ...);

/**
 * 使用可变参数列表的带颜色格式化输出
 * @param color 颜色代码
 * @param fmt 格式字符串
 * @param ap 可变参数列表
 * @return 输出的字符数量
 */
int vprintf_color(int color, const char *fmt, va_list ap);

// 支持的格式说明符定义
#define FORMAT_DECIMAL     'd'
#define FORMAT_INTEGER     'i'  
#define FORMAT_UNSIGNED    'u'
#define FORMAT_HEX_LOWER   'x'
#define FORMAT_HEX_UPPER   'X'
#define FORMAT_OCTAL       'o'
#define FORMAT_CHAR        'c'
#define FORMAT_STRING      's'
#define FORMAT_POINTER     'p'
#define FORMAT_PERCENT     '%'

#endif // _PRINTF_H
